package cn.itcast.hiss.process.activiti.service;

import cn.itcast.hiss.message.Message;
import cn.itcast.hiss.message.MessageContext;
import cn.itcast.hiss.message.sender.task.*;
import org.activiti.engine.delegate.DelegateExecution;

import java.util.Set;

/**
 * activiti 的业务实现
 *
 * @author: miukoo
 * @describe: activiti
 * @date: 2022/12/28 10:10
 */
public interface ActivitiService {

    Set<String> doGetClientUserInfo(DelegateExecution execution, String assignee);

    void modelToDeploment(Message message, MessageContext messageContext);

    void startByModel(Message message, MessageContext messageContext, boolean b);

    /**
     * 取消流程
     * @param params
     * @param messageContext
     */
    void cancelTask(CancelTaskMessage params, MessageContext messageContext);

    /**
     * 同意
     * @param params
     * @param messageContext
     */
    void approveTask(ApproveTaskMessage params, MessageContext messageContext);

    /**
     * 不同意
     * @param params
     * @param messageContext
     */
    void rejectTask(RejectTaskMessage params, MessageContext messageContext);

    /**
     * 驳回任务
     * @param params
     * @param messageContext
     * @param first 是否默认退回流程第一个节点，true 是,false默认是上一个节点，
     */
    void rollBackTask(AnyJumpTaskMessage params, MessageContext messageContext, boolean first);

    /**
     * 委派
     * @param params
     * @param messageContext
     */
    void delegateTask(DelegateTaskMessage params, MessageContext messageContext);

    /**
     * 认领
     * @param params
     * @param messageContext
     */
    void claimTask(TaskMessage params, MessageContext messageContext);

    /**
     * 归还
     * @param params
     * @param messageContext
     */
    void unclaimTask(TaskMessage params, MessageContext messageContext);

    /**
     * 前加签
     * @param params
     * @param messageContext
     */
    void beforeSignTask(AddExecutionTaskMessage params, MessageContext messageContext);

    /**
     * 并加签
     * @param params
     * @param messageContext
     */
    void doParallelSignTask(AddExecutionTaskMessage params, MessageContext messageContext);

}
